﻿#region Usings
using System;
using System.Collections.Generic;
using StructureMap;
using Telerik.Web.UI.Calendar;
using TimeTracker.Core.DataAccess;
using TimeTracker.Core.Domain.Entities;
using TimeTracker.Web.TimeTracker.Interface;
#endregion

namespace TimeTracker.Web.TimeTracker.Presenter
{
    public class SihtericaPresenter
    {
        private ISihtericeView _view;
        private IOrganizacionaSemaRepository _organizacionaSemaRepository;
        private IRadnikRepository _radnikRepository;
        private IUnosVremenaRepository _unosVremenaRepository;
        private IUnosVremenaSatiRepository _unosVremenaSatiRepository;

        public void Init(ISihtericeView view)
        {
            _view = view;
            _organizacionaSemaRepository = ObjectFactory.GetInstance<IOrganizacionaSemaRepository>();

            IList<OrganizacionaSema> organizacioneSeme = _organizacionaSemaRepository.UzmiSveOrganizacioneSeme();
            _view.PokaziInicijalneVrednosti(organizacioneSeme);
        }

        public void InitRadniciOrganizacioneSeme(ISihtericeView view, int orgSemaId)
        {
            _view = view;
            _radnikRepository = ObjectFactory.GetInstance<IRadnikRepository>();

            IList<Radnik> radniciOrgSeme = _radnikRepository.UzmiRadnikePoOrganizacionojSemi(orgSemaId);
            _view.PokaziRadnikeOrganizacioneSeme(radniciOrgSeme);
        }

        public void InitKalendarPosleSelektovanjaRadnika(ISihtericeView view, int radnikId)
        {
            _view = view;
            _unosVremenaRepository = ObjectFactory.GetInstance<IUnosVremenaRepository>();
            _radnikRepository = ObjectFactory.GetInstance<IRadnikRepository>();

            Radnik selektovniRadnik = _radnikRepository.UzmiRadnikaPoId(radnikId);
            IList<UnosVremena> vremena = _unosVremenaRepository.UzmiUnoseVremenaPoRadnikId(radnikId);

            _view.InicijalizujKalendarZaRadnika(vremena, selektovniRadnik);

        }

        public void InitPodaciZaRadnikaPosleSelektovanjaDana(ISihtericeView view, int radnikId, DateTime dan)
        {
            _view = view;
            _unosVremenaRepository = ObjectFactory.GetInstance<IUnosVremenaRepository>();
            _unosVremenaSatiRepository = ObjectFactory.GetInstance<IUnosVremenaSatiRepository>();

            UnosVremenaSati unosVremenaSati = _unosVremenaSatiRepository.UzmiUnosVremenaSatiPoRadnikIdZaDatum(radnikId, dan);
            _view.PokaziUnosVremenaZaRadnika(unosVremenaSati, dan);
        }

        public void SelektujSveDaneRadnikaZaMesec(ISihtericeView view, int radnikId, int year, int month)
        {
            _view = view;
            _unosVremenaRepository = ObjectFactory.GetInstance<IUnosVremenaRepository>();
            _unosVremenaSatiRepository = ObjectFactory.GetInstance<IUnosVremenaSatiRepository>();
            _radnikRepository = ObjectFactory.GetInstance<IRadnikRepository>();

            IList<UnosVremenaSati> vremena = _unosVremenaRepository.SelektujSveDaneMesecaZaRadnika(radnikId, year, month);
            Radnik selektovniRadnik = _radnikRepository.UzmiRadnikaPoId(radnikId);            

            _view.PokaziUnoseVremenaZaRadnika(vremena, selektovniRadnik);
        }

        public void DeselektujSveDaneRadnikaZaMesec(ISihtericeView view, int radnikId, int year, int month)
        {
            _view = view;
            _unosVremenaRepository = ObjectFactory.GetInstance<IUnosVremenaRepository>();
            _radnikRepository = ObjectFactory.GetInstance<IRadnikRepository>();

            IList<UnosVremenaSati> vremena = _unosVremenaRepository.DeselektujSveDaneMesecaZaRadnika(radnikId, year, month);
            Radnik selektovniRadnik = _radnikRepository.UzmiRadnikaPoId(radnikId);

            _view.PokaziUnoseVremenaZaRadnika(vremena, selektovniRadnik);
        }

        public void KalendarRenderingDana(ISihtericeView view, int radnikId, DayRenderEventArgs args)
        {
            _view = view;
            _unosVremenaRepository = ObjectFactory.GetInstance<IUnosVremenaRepository>();
            _unosVremenaSatiRepository = ObjectFactory.GetInstance<IUnosVremenaSatiRepository>();

            IList<UnosVremena> vremena = _unosVremenaRepository.UzmiUnoseVremenaPoRadnikId(radnikId);
            IList<UnosVremenaSati> sati = _unosVremenaSatiRepository.UzmiUnoseVremenaSateZaRadnikaPoId(radnikId);

            _view.RenderujKalendarSaVremenima(vremena, sati, args);
        }

        public void DodajPosebneSateRadnikuZaDan(ISihtericeView view, int radnikId, DateTime datum, int brojSati, string tipDana, string tipSata)
        {
            _view = view;
            _unosVremenaRepository = ObjectFactory.GetInstance<IUnosVremenaRepository>();

            _unosVremenaRepository.DodajPosebneSateRadnikuZaDan(radnikId, datum, brojSati, tipDana, tipSata);

            InitKalendarPosleSelektovanjaRadnika(view, radnikId);
        }

        public void DodajIliIzmeniDanZaRadnika(ISihtericeView view, int radnikId, DateTime datum, int trajanje, string opis, string tipDana)
        {
            _view = view;
            _unosVremenaRepository = ObjectFactory.GetInstance<IUnosVremenaRepository>();

            _unosVremenaRepository.DodajIliIzmeniDanZaRadnika(radnikId, datum, trajanje, opis, tipDana);

            InitKalendarPosleSelektovanjaRadnika(view, radnikId);
        }
    }
}
